查看原文
其他

2018-05-27

Azure Cosmos DB是微软公司打造的一项全球分布式、横向分区、多模型数据库服务。该服务允许客户弹性(及独立形式)跨越任意数量地理服务区对吞吐量与存储进行扩展。Azure Cosmos DB可立足第99百分位比例提升99.99%高可用性水平,提供可预测吞吐量以及多套经过明确定义的一致性模型,从而保证实现低延迟表现。Azure Cosmos DB亦当前行业中第一项,同时也是惟一一项全球分布式数据库服务。其可提供全面的服务水平协议(简称SLA),其中涵盖客户最为关心的四大维度:

  1. 吞吐量(超高峰值访问也没问题,比方说双十一电商网站等应用)

  2. 第99百分位比例延迟表现(高速存储,与高IO相互配合)

  3. 可用性(保证你的数据不会在大量访问时丢失)

  4. 一致性(保证你的数据在全球各地访问都可保持一致)

作为一项云服务,我们对Azure Cosmos DB进行了精心设计与工程开发,同时充分考虑到多租户及全球分布等实际因素。在今天的博文当中,我们将对Azure Cosmos DB当中的关键性功能以及架构选择作出解读。

CosmosDB在全球同服下适合的场景与客户案例如下:

物联网    

  • Toyota 日本汽车公司运用CosmosDB 来进行全球车辆IoT的部署。

零售与市场营销

  • 达美乐美国披萨公司运用Cosmos DB来整合全球订餐网页与App

  • Jet.com. 美国电商集团运用Cosmos DB 建立全球电商网页与App

  • Asos.com. 英国时尚快消产业Asos.com运用Cosmos DB 来整合全球850个品牌销售的电商网站

游戏

  • NextGames. The Walking Dead: No Man's Land 游戏运用Cosmos DB来支持全球跨平台游戏用户

  • Halo 5 运用Azure Cosmos DB 搭建多人实时在线游戏平台

跨平台网页与移动应用

  • RealMadrid. 皇家马德里队运用CosmosDB支应全球四亿粉丝的App与网站应用

Azure Cosmos DB基本信息

图灵奖获得者兼全球知名计算机科学家Leslie Lamport博士的工作成果深刻影响到众多大规模分布式系统。Azure Cosmos DB自然也不例外。在AzureCosmos DB长达七年的构建过程当中,Leslie的成果一直是我们最重要的灵感源泉。

Azure Cosmos DB的设计目标

Azure Cosmos DB自2010年起既已立项,当时的代号为“Florence项目”。其目标在于解决开发者在微软环境下构建互联网规模应用程序时面临的几大根本性痛点。我们为Azure Cosmos DB制定出以下发展目标。

  1. 保证客户能够在全球规模下根据需求以弹性方式扩展吞吐量与存储量。从收到请求到完成扩展,这套系统应能够在99%比例的场景下于5秒之内交付经过配置的吞吐能力。

  2. 帮助客户构建起具备高度响应性的关键性任务应用程序。这套系统必须能够在99%比例的场景下交付可预测且拥有可靠性保障的端到端低读取与写入延迟。

  3. 确保这套系统“始终开启”。这套系统必须实现99.99%的可用性,且不因与数据库相关的具体服务区数量而受到影响。为了保证客户能够对应用程序的端到端可用性属性进行测试,该服务必须能够在稳定状态下允许客户模拟服务区故障或者标记与其数据库下线状况相关的服务区。这将有助于难应用程序的端到端可用性属性。

  4. 使得开发人员能够编写出正确的全球分布式应用程序。这套系统必须围绕数据一致性提供直观且可预测的编程模型。尽管强大的一致性会带来成本提升,但仅依托于“最终一致性”在数据库当中编写大型全球分布式应用程序将引发难以回溯的应用程序代码问题、缺陷以及正确性bug。

  5. 为之前4项目标提供严格且符合财务要求的综合性SLA。

  6. 减轻开发人员所面临的数据库模式/索引管理以及版本控制等负担。对于全球分布式应用程序而言,确保数据库模式与索引同应用程序模式保持同步往往尤为难以实现。

  7. 以原生方式支持多种数据模型以及各类高人气数据访问API。外部公开API与内部数据表达之间的翻译流程必须高效可行。

  8. 提供极低运营成本以帮助客户节约资金投入。

Azure Cosmos DB设计中值得强调的各个方面

Azure Cosmos DB在设计当中的独特之处,在于我们采取独特的方法以引导这些约束条件并在各工程技术任务之间选取最佳平衡点。

以下为Azure Cosmos DB系统设计当中值得强调的各个重要方面。

Azure Cosmos DB的设计旨在以动态形式配置数据库引擎与底层存储之间的接近度,从而支持匹配不同性能SLA的多个服务层。根据具体服务层,系统可通过配置用于支持计算及存储资源,从而(a)立足同一进程空间进行同地协作; (b)立足同一集群内的各设备进行分解; 或者(c)跨越同一服务区内多个不同集群/数据中心进行分解。

  1. Azure Cosmos DB面向吞吐能力、延迟、一致性以及可用性等角度建立起综合性SLA体系。这些SLA负责明确定义一套全球分布式设置当中对于延迟、一致性、可用性以及吞吐能力间的权衡结果。

  2. Azure Cosmos DB在系统内核层面采取独特的资源治理设计,其能够提供一套一致性编程模型以跨越一组异构性数据库运营集实现吞吐能力配置。

  3. Azure Cosmos DB拥有一套高度模块化且资源得到充分治理的方案,旨在解决各类常见协调问题,具体包括跨服务区复制以及透明分区管理等等。

  4. Azure Cosmos DB在设计上能够跨越多个地理服务区实现吞吐能力的弹性扩展,同时保证不影响到SLA。该系统在设计上即考虑到跨服务区吞吐量扩展需求,且可确保吞吐量变化以即时形式存在。

  5. Azure Cosmos DB的设计与实现方案可精确指定一组简单明确且符合TLA+要求的、经过良好定义的一致性模型。这种能力使得各一致性模型能够充分适应各类现实场景,提供可证明的一致性保证,在多租户与全球分布式设置当中拥有商业可行性,同时提供一套直观的编程模型以帮助开发人员编写出正确的分布式应用程序。据我们所知,Azure Cosmos DB亦是目前市场上惟一一套全球分布式数据库系统,其可实现有限过期、会话与一致性前缀等一致性模型的顺利运营,同时将其交付给开发者并配合明确的语义、性能/可用性权衡以及SLA支持能力。

  6. Azure Cosmos DB拥有一套写入优化型资源治理与模式中立式数据库引擎(备注:自相关论文发布以来,其又迎来了可观的长足演进)。这套引擎能够持续处理大规模更新,以自动化方式对全部输入内容进行索引,并在保证确认客户更新前以同步方式实现索引持久性与高可用性的同时,维持稳定的低延迟表现。

  7. Azure Cosmos DB在设计中充分考虑到其核心数据模型与类型系统的具体需求并配合极具可扩展数据库引擎设计,旨在允许用户高效向其核心数据模型当中添加、翻译以及投射多种数据模型以及API与编程语言类型系统。

一项多模型、多API数据库服务

图一:Azure Cosmos DB是一套多模型、多API全球分布式数据库平台

如图一所示,Azure Cosmos DB能够原生支持多种数据模型。Azure Cosmos DB数据引擎的核心类型系统基于原子-记录-序列(简称ARS)。各原子由一组小型原始类型组成,具体包括字符串、布尔类型以及数字等组成。其中各记录为结构体,序列则为包含有原子、记录或序列的数组。Azure Cosmos DB的数据库引擎能够高效将各数据模型翻译并投射至基于ARS的数据模型当中。AzureCosmos DB的核心数据模型可原生接受来自动态类型编程语言的访问,并可直接表达为JSON或者其它类似的形式。这样的设计亦使其能够原生支持用于数据访问及查询的各类主流数据库API。Azure Cosmos DB的数据库引擎目前支持DocumentDB SQL、MongoDB、Azure Table Storage以及Gremlin图形查询API。我们还计划对其进行进一步扩展,借以支持其它高人气数据库API。而最重要的优势在于,开发人员可以利用流行的OSS API以构建应用程序,且同时享受经过实战验证且完全受控的全球分布式数据库系统所能带来的所有助益。

立足基础层面建立全球分布体系

如图二所示,客户资源通过两大维度进行分布:在特定服务区中,全部资源双可利用资源分区进行横向分区(本地分布)。而各资源分区亦可跨地理服务区进行复制(全球分布)。

图二:同一容器可同时进行本地与全球分布。

当客户对吞吐量或存储量进行弹性扩展时,Azure Cosmos DB能够以透明方式在所有服务区内执行分区管理操作。无论具体规模、分布或者故障情况如何,AzureCosmos DB都能够持续提供单一全球分布式资源系统镜像。Azure Cosmos DB当中的资源全球分布系统属于交钥匙型方案:无论何时,您仅需数次点击(或者通过编程方式进行一次API调用),即可将任意数量地理服务区与其数据库帐户进行关联。另外,无论数据规模或者服务区数量如何,Azure Cosmos DB皆保证在99%比例的场景下,能够于接到客户申请的1小时之内完成服务区关联。之所以能够实现这一效果,是因为我们以并行方式将来自全部源资源分区的数据馈送并复制至新的关联服务区当中。客户亦可移除现有服务区,或者对原本关联至其数据库帐户的服务区进行“离线”操作。

全资源治理堆栈

Azure Cosmos DB旨在允许客户以弹性方式根据应用流量模式跨越不同服务区实现吞吐量扩展,从而立足地理位置与时间因素支持波动性工作负载。要以具备成本效益的方式运营成千上万种不同类型的全球分布式工作负载,我们必须实现细粒度多租户机制,即由数百家客户共享同一设备,并由数千家客户共享同一集群。为了在保证运营成本效益的同时实现各客户间的性能隔离,我们从根本层面充分考量了系统的资源治理方式。作为一套资源治理系统,Azure Cosmos DB属于一套包含众多级联组件的大规模分布式队列系统,且其中各组件皆通过精心调校以保证在系统资源预算配额范围之内提供可预测的吞吐能力。为了以最佳方式利用特定集群当中的系统资源(包括CPU、内存、磁盘以及网络),集群中的每台设备都可以动态方式托管十余家到百余家客户。另外,从准入控制到全部I/O路径,整体堆栈内皆部署有速率限制与背压控制机制。我们的数据库引擎可实现细粒度并发性,并在尽可能节约系统资源的同时最大程度提供高吞吐量。

结论

Azure Cosmos DB将全球分布、弹性横向可扩展性以及多模型与模式中立式数据库引擎作为设计目标。作为一套云原生多租户数据库系统,Azure Cosmos DB在设计上充分考虑到立足整体堆栈实现资源交叉治理。从初始设计开始,我们就要求AzureCosmos DB必须具备全球数据分布、多种明确一致性水平选项、弹性跨地理服务区吞吐量扩展等能力,同时必须在自身综合性SLA当中涵盖全部客户对于吞吐量、一致性、延迟以及可用性的实际要求。

如想体验全球同服的高效体验,

立即注册全球Azure服务吧!

扫描上方二维码,免费试用全球版Azure!

推荐阅读

清华大学HoloLens开发大赛回顾

每周10分钟,5周打造一支高效团队

面对7160亿美元机遇 微软助领军者解锁数字化转型

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存